const path = require("path");
const { sep } = path;
// 匹配当前目录及其子目录下的所有.js文件，并将匹配到的文件路径打印出来‌
/**
 * service loader
 * @param {object} app Koa  实例
 * 加载所有service 可以通过 'app.service.${目录}.${文件}' 访问
 * 配置区分 开发/测试/生产 通过env环境读取不同的文件配置 env.config
 * 目录对应的config配置
 * 默认配置 config/config.default.js
 * 本地配置 config/config.local.js
 * 测试配置 config/config.beta.js
 * 生产配置 config/config.prod.js
 */
module.exports = (app) => {
  //找到config目录
  const configPath = path.resolve(app.baseDir, `.${sep}config`);

  // 获取目标default.config
  let defaultConfig = {};
  try {
    defaultConfig = require(path.resolve(
      configPath,
      `.${sep}config.default.js`
    ));
  } catch (error) {
    console.log(`[exception] there is no default.config file`);
  }
  // 获取env.config
  let envConfig = {};
  try {
    let env = app.env;
    if (env.isLocal()) {
      //本地
      envConfig = require(path.resolve(configPath, `.${sep}config.local.js`));
    } else if (env.isBeta()) {
      //测试
      envConfig = require(path.resolve(configPath, `.${sep}config.beta.js`));
    } else if (env.isProduction()) {
      //生产
      envConfig = require(path.resolve(configPath, `.${sep}config.prod.js`));
    }
  } catch (error) {
    console.log(`[exception] there is no env.config file`);
  }
  // 覆盖并加载config配置

  app.config = Object.assign({}, defaultConfig, envConfig);
};
